using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
namespace Entidades
{
    public class Respuesta
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Respuesta), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Respuesta), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Respuesta), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Respuesta), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Respuesta), ";
        private int _Id;
        private int _IdPregunta;
        private string _Respuesta;
        private DateTime? _FechaAlta;
        private DateTime? _FechaBaja;
        private int _idMotivoBajaRespuesta;
        private DateTime? _FechaLeido;

        private int _IdUsuarioBajaRespuesta;
        #region "Propiedades"
        public int Id
        {
            get { return _Id; }
            set { _Id = value; }
        }
        public int IdPregunta
        {
            get { return _IdPregunta; }
            set { _IdPregunta = value; }
        }
        public string strRespuesta
        {
            get { return _Respuesta; }
            set { _Respuesta = value; }
        }
        public DateTime? FechaAlta
        {
            get { return _FechaAlta; }
            set { _FechaAlta = value; }
        }
        public DateTime? FechaBaja
        {
            get { return _FechaBaja; }
            set { _FechaBaja = value; }
        }
        public int idMotivoBajaRespuesta
        {
            get { return _idMotivoBajaRespuesta; }
            set { _idMotivoBajaRespuesta = value; }
        }
        public int IdUsuarioBajaRespuesta
        {
            get { return _IdUsuarioBajaRespuesta; }
            set { _IdUsuarioBajaRespuesta = value; }
        }    

        public DateTime? FechaLeido
        {
            get { return _FechaLeido; }
            set { _FechaLeido = value; }
        }
        #endregion
        #region "Lazys"
        private Pregunta _Pregunta;
        public Pregunta Pregunta
        {
            get
            {
                if (_Pregunta == null)
                {
                    _Pregunta = new Pregunta(_IdPregunta);
                }
                return _Pregunta;
            }
        }
        #endregion
        public Respuesta()
        {
            _Respuesta = "";

        }
        public Respuesta(int Id)
        {
            Respuesta respuesta = traerUno(Id);
            this._Id = respuesta.Id;
            this._IdPregunta = respuesta.IdPregunta;
            this._Respuesta = respuesta.strRespuesta;
            this._FechaAlta = respuesta.FechaAlta;
            this._FechaBaja = respuesta.FechaBaja;
            this._idMotivoBajaRespuesta = respuesta.idMotivoBajaRespuesta;
            this._IdUsuarioBajaRespuesta = respuesta.IdUsuarioBajaRespuesta;
        }
        #region "Metodos Publicos"
        public void Alta()
        {
            try
            {
                validaAlta();
                DALRespuesta.Alta(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public void Baja()
        {
            try
            {
                validaBaja();
                DALRespuesta.Baja(_Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public void Modificar()
        {
            try
            {
                validaModificacion();
                DALRespuesta.Modificar(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        public void MarcarComoLeido()
        {
            try
            {
                DALRespuesta.MarcarComoLeido(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        #region "Metodos Estaticos"
        private Respuesta traerUno(int Id)
        {
            try
            {
                return DALRespuesta.traerUno(Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerUno + ex.Message);
            }
        }
        public static List<Respuesta> TraerTodos()
        {
            try
            {
                return DALRespuesta.TraerTodos();
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }
        #region "Lazys"
        public static Respuesta getOneByIdPregunta(int IdPregunta)
        {
            try
            {
                return DALRespuesta.getOneByIdPregunta(IdPregunta);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Respuesta)" + ex.Message);
            }
        }
        #endregion
        #endregion
        #endregion
        #region "Metodos Privados"
        private void validaAlta()
        {
        }
        private void validaBaja()
        {
            //lanza excepcion si no valida
        }
        private void validaModificacion()
        {
            validaAlta();
        }
        #endregion
    }
}
